#include <my_header.h>
// 父子进程不一定那个先执行 不依赖于这个代码
// 写入文件顺序:fat(sleep) -> son (sleep)-> fat ->son1
/* Usage: ./3_fork_fd_before */
int main(void){                                  
    int fd = open("file_before", O_RDWR);
    ERROR_CHECK(fd, -1, "open");
    pid_t pid = fork();
    if(pid == 0)
    {
        // 父进程停止期间 子进程全部写入
        write(fd, "son", 3);
        sleep(1);
        write(fd, "son1", 4);
    }else
    {
        // 先执行父进程
        write(fd, "fat", 3);
        sleep(1);   // 停止1s
        write(fd, "fat1", 4);
    }
    return 0;
}

#if 0
    当使用fork()函数创建子进程之前我们打开了一个文件，
fork时候子进程会拷贝父进程的文件描述符数组，文件描述
符数组中存储的指向一个文件表项的指针。但是需要注意的
是文件表项是操作系统维护的、可以多个进程程共
享。这意味着父进程和子进程将共享打开的文件表项。

    而在这个文件表项中,不仅维护了指向磁盘文件的inode指
针,还维护有文件读写位置的偏移量。这就意味着,父子进程
对同一个文件对象会共享读写位置。

#endif
